import 'package:flutter/material.dart';
import '../theme/app_colors.dart';

/// 情绪相关常量配置
/// Emotion related constants configuration
class EmotionConstants {
  // 私有构造函数，防止实例化
  // Private constructor to prevent instantiation
  EmotionConstants._();

  // ==================== 情绪类型映射 Emotion Type Mapping ====================
  
  /// 情绪类型到中文标签的映射
  /// Emotion type to Chinese label mapping
  static const Map<String, String> emotionLabels = {
    'happy': '开心',
    'sad': '悲伤',
    'angry': '愤怒',
    'anxious': '焦虑',
    'calm': '平静',
    'excited': '兴奋',
    'tired': '疲惫',
    'confused': '困惑',
    'grateful': '感激',
    'lonely': '孤独',
  };
  
  /// 情绪类型到英文标签的映射
  /// Emotion type to English label mapping
  static const Map<String, String> emotionLabelsEn = {
    'happy': 'Happy',
    'sad': 'Sad',
    'angry': 'Angry',
    'anxious': 'Anxious',
    'calm': 'Calm',
    'excited': 'Excited',
    'tired': 'Tired',
    'confused': 'Confused',
    'grateful': 'Grateful',
    'lonely': 'Lonely',
  };
  
  /// 情绪类型到表情符号的映射
  /// Emotion type to emoji mapping
  static const Map<String, String> emotionEmojis = {
    'happy': '😊',
    'sad': '😢',
    'angry': '😠',
    'anxious': '😰',
    'calm': '😌',
    'excited': '🤩',
    'tired': '😴',
    'confused': '😕',
    'grateful': '🙏',
    'lonely': '😔',
  };
  
  /// 情绪类型到图标的映射
  /// Emotion type to icon mapping
  static const Map<String, IconData> emotionIcons = {
    'happy': Icons.sentiment_very_satisfied,
    'sad': Icons.sentiment_very_dissatisfied,
    'angry': Icons.sentiment_dissatisfied,
    'anxious': Icons.psychology_alt,
    'calm': Icons.self_improvement,
    'excited': Icons.celebration,
    'tired': Icons.bedtime,
    'confused': Icons.help_outline,
    'grateful': Icons.favorite,
    'lonely': Icons.person_outline,
  };
  
  /// 情绪类型到颜色的映射
  /// Emotion type to color mapping
  static const Map<String, Color> emotionColors = {
    'happy': AppColors.emotionHappy,
    'sad': AppColors.emotionSad,
    'angry': AppColors.emotionAngry,
    'anxious': AppColors.emotionAnxious,
    'calm': AppColors.emotionCalm,
    'excited': AppColors.emotionExcited,
    'tired': AppColors.emotionTired,
    'confused': AppColors.emotionConfused,
    'grateful': AppColors.emotionGrateful,
    'lonely': AppColors.emotionLonely,
  };
  
  /// 情绪类型到描述的映射
  /// Emotion type to description mapping
  static const Map<String, String> emotionDescriptions = {
    'happy': '感到快乐和满足',
    'sad': '感到悲伤和失落',
    'angry': '感到愤怒和不满',
    'anxious': '感到焦虑和担心',
    'calm': '感到平静和放松',
    'excited': '感到兴奋和激动',
    'tired': '感到疲惫和困倦',
    'confused': '感到困惑和迷茫',
    'grateful': '感到感激和感谢',
    'lonely': '感到孤独和寂寞',
  };
  
  // ==================== 情绪强度映射 Emotion Intensity Mapping ====================
  
  /// 情绪强度到标签的映射
  /// Emotion intensity to label mapping
  static const Map<int, String> intensityLabels = {
    1: '非常轻微',
    2: '轻微',
    3: '较轻',
    4: '轻度',
    5: '中等',
    6: '较强',
    7: '强烈',
    8: '很强烈',
    9: '极强烈',
    10: '最强烈',
  };
  
  /// 情绪强度到英文标签的映射
  /// Emotion intensity to English label mapping
  static const Map<int, String> intensityLabelsEn = {
    1: 'Very Mild',
    2: 'Mild',
    3: 'Light',
    4: 'Moderate',
    5: 'Medium',
    6: 'Strong',
    7: 'Intense',
    8: 'Very Intense',
    9: 'Extreme',
    10: 'Maximum',
  };
  
  /// 情绪强度到颜色透明度的映射
  /// Emotion intensity to color opacity mapping
  static const Map<int, double> intensityOpacity = {
    1: 0.3,
    2: 0.4,
    3: 0.5,
    4: 0.6,
    5: 0.7,
    6: 0.8,
    7: 0.85,
    8: 0.9,
    9: 0.95,
    10: 1.0,
  };
  
  // ==================== 情绪分类 Emotion Categories ====================
  
  /// 积极情绪类型
  /// Positive emotion types
  static const List<String> positiveEmotions = [
    'happy',
    'calm',
    'excited',
    'grateful',
  ];
  
  /// 消极情绪类型
  /// Negative emotion types
  static const List<String> negativeEmotions = [
    'sad',
    'angry',
    'anxious',
    'tired',
    'confused',
    'lonely',
  ];
  
  /// 中性情绪类型
  /// Neutral emotion types
  static const List<String> neutralEmotions = [
    'calm',
  ];
  
  // ==================== 情绪建议 Emotion Suggestions ====================
  
  /// 情绪类型到建议的映射
  /// Emotion type to suggestions mapping
  static const Map<String, List<String>> emotionSuggestions = {
    'happy': [
      '继续保持这种积极的心态',
      '分享你的快乐给身边的人',
      '记录下让你开心的事情',
      '感恩当下的美好时光',
    ],
    'sad': [
      '允许自己感受这种情绪',
      '寻找信任的人倾诉',
      '尝试做一些让你放松的活动',
      '记住这种感觉是暂时的',
    ],
    'angry': [
      '深呼吸，让自己冷静下来',
      '尝试理解愤怒背后的原因',
      '通过运动释放负面情绪',
      '寻找建设性的解决方案',
    ],
    'anxious': [
      '练习深呼吸和冥想',
      '专注于当下，不要过度担心未来',
      '列出你担心的事情并逐一分析',
      '寻求专业帮助如果需要的话',
    ],
    'calm': [
      '享受这种平静的状态',
      '利用这个时机进行反思',
      '做一些你喜欢的安静活动',
      '保持这种内心的平衡',
    ],
    'excited': [
      '享受这种兴奋的感觉',
      '将这种能量投入到有意义的事情上',
      '与他人分享你的兴奋',
      '记录下让你兴奋的原因',
    ],
    'tired': [
      '给自己充足的休息时间',
      '检查你的睡眠质量',
      '适当减少工作负担',
      '注意营养和水分补充',
    ],
    'confused': [
      '花时间整理你的思绪',
      '寻求他人的建议和帮助',
      '将复杂的问题分解成小部分',
      '不要急于做决定',
    ],
    'grateful': [
      '继续培养感恩的心态',
      '表达你对他人的感谢',
      '记录下你感激的事情',
      '将这种感激转化为行动',
    ],
    'lonely': [
      '主动联系朋友和家人',
      '参加社交活动或兴趣小组',
      '尝试帮助他人来建立连接',
      '记住孤独是暂时的感受',
    ],
  };
  
  // ==================== 情绪问题引导 Emotion Guided Questions ====================
  
  /// 情绪类型到引导问题的映射
  /// Emotion type to guided questions mapping
  static const Map<String, List<String>> emotionQuestions = {
    'happy': [
      '是什么让你感到如此开心？',
      '你想如何延续这种快乐的感觉？',
      '有什么人或事你想要感谢的吗？',
    ],
    'sad': [
      '是什么让你感到悲伤？',
      '你现在最需要什么样的支持？',
      '有什么小事可以让你感觉好一点？',
    ],
    'angry': [
      '是什么触发了你的愤怒？',
      '你希望如何处理这种情况？',
      '愤怒背后隐藏着什么其他情绪？',
    ],
    'anxious': [
      '你在担心什么具体的事情？',
      '这种担心是基于现实还是想象？',
      '你可以采取什么行动来减少焦虑？',
    ],
    'calm': [
      '是什么帮助你达到这种平静状态？',
      '你想如何利用这种平静的时光？',
      '有什么想法或感悟想要记录下来？',
    ],
    'excited': [
      '是什么让你如此兴奋？',
      '你计划如何庆祝或分享这种兴奋？',
      '这种兴奋给你带来了什么启发？',
    ],
    'tired': [
      '你的疲惫主要来源于什么？',
      '你最近的睡眠和休息情况如何？',
      '有什么可以帮助你恢复精力？',
    ],
    'confused': [
      '你对什么感到困惑？',
      '你需要什么信息来澄清困惑？',
      '谁可能能够帮助你理清思路？',
    ],
    'grateful': [
      '你今天最感激什么？',
      '有什么人你想要表达感谢？',
      '这种感激给你带来了什么感受？',
    ],
    'lonely': [
      '你的孤独感主要来自哪里？',
      '有什么人你想要联系的吗？',
      '什么活动可能帮助你感觉不那么孤独？',
    ],
  };
  
  // ==================== 工具方法 Utility Methods ====================
  
  /// 获取情绪标签
  /// Get emotion label
  static String getEmotionLabel(String emotionType, {bool isEnglish = false}) {
    if (isEnglish) {
      return emotionLabelsEn[emotionType] ?? emotionType;
    }
    return emotionLabels[emotionType] ?? emotionType;
  }
  
  /// 获取情绪表情符号
  /// Get emotion emoji
  static String getEmotionEmoji(String emotionType) {
    return emotionEmojis[emotionType] ?? '😐';
  }
  
  /// 获取情绪图标
  /// Get emotion icon
  static IconData getEmotionIcon(String emotionType) {
    return emotionIcons[emotionType] ?? Icons.sentiment_neutral;
  }
  
  /// 获取情绪颜色
  /// Get emotion color
  static Color getEmotionColor(String emotionType) {
    return emotionColors[emotionType] ?? AppColors.primary;
  }
  
  /// 获取情绪描述
  /// Get emotion description
  static String getEmotionDescription(String emotionType) {
    return emotionDescriptions[emotionType] ?? '未知情绪';
  }
  
  /// 获取强度标签
  /// Get intensity label
  static String getIntensityLabel(int intensity, {bool isEnglish = false}) {
    if (isEnglish) {
      return intensityLabelsEn[intensity] ?? 'Unknown';
    }
    return intensityLabels[intensity] ?? '未知';
  }
  
  /// 获取强度透明度
  /// Get intensity opacity
  static double getIntensityOpacity(int intensity) {
    return intensityOpacity[intensity] ?? 0.5;
  }
  
  /// 判断是否为积极情绪
  /// Check if emotion is positive
  static bool isPositiveEmotion(String emotionType) {
    return positiveEmotions.contains(emotionType);
  }
  
  /// 判断是否为消极情绪
  /// Check if emotion is negative
  static bool isNegativeEmotion(String emotionType) {
    return negativeEmotions.contains(emotionType);
  }
  
  /// 判断是否为中性情绪
  /// Check if emotion is neutral
  static bool isNeutralEmotion(String emotionType) {
    return neutralEmotions.contains(emotionType);
  }
  
  /// 获取情绪建议
  /// Get emotion suggestions
  static List<String> getEmotionSuggestions(String emotionType) {
    return emotionSuggestions[emotionType] ?? [];
  }
  
  /// 获取情绪引导问题
  /// Get emotion guided questions
  static List<String> getEmotionQuestions(String emotionType) {
    return emotionQuestions[emotionType] ?? [];
  }
  
  /// 获取所有情绪类型
  /// Get all emotion types
  static List<String> getAllEmotionTypes() {
    return emotionLabels.keys.toList();
  }
  
  /// 根据情绪强度获取带透明度的颜色
  /// Get color with opacity based on emotion intensity
  static Color getEmotionColorWithIntensity(String emotionType, int intensity) {
    final color = getEmotionColor(emotionType);
    final opacity = getIntensityOpacity(intensity);
    return color.withOpacity(opacity);
  }
  
  /// 获取情绪类型的完整信息
  /// Get complete emotion type information
  static Map<String, dynamic> getEmotionInfo(String emotionType) {
    return {
      'type': emotionType,
      'label': getEmotionLabel(emotionType),
      'labelEn': getEmotionLabel(emotionType, isEnglish: true),
      'emoji': getEmotionEmoji(emotionType),
      'icon': getEmotionIcon(emotionType),
      'color': getEmotionColor(emotionType),
      'description': getEmotionDescription(emotionType),
      'isPositive': isPositiveEmotion(emotionType),
      'isNegative': isNegativeEmotion(emotionType),
      'isNeutral': isNeutralEmotion(emotionType),
      'suggestions': getEmotionSuggestions(emotionType),
      'questions': getEmotionQuestions(emotionType),
    };
  }
}